
//---2025-06-07-----
// 蓄电池物模型更新到 <<蓄电池传感器物模型-v1.8>>
// v1.8相当于v1.7 配置参数部分改动比较大



//#include  "iotv30_config.h"


#include "cjson_api_readAttr.h"
#include "iot_node_func.h"
#include "iotv30_config.h"
#include "test_mode.h"
// #include "iot_node.h"

#include "uart_printf.h"
#include <string.h>

#include "dev_battery.h"



////注意：改变 数组 battery_iot_id_table[battery_index_end]的定义-----需要同步更新  枚举变量的定义 battery_attr_index_e-------
const  uint16_t  battery_iot_id_table[battery_index_end]=  
{
    //iot_id(hex)	,	name	R/W	变化上报	分类	数据类型	范围	单位	默认值		
    //	运行参数					
    0x0FE2	,// FE2	4066	battAlmTotal	电池报警状态汇总	RO	
    0x110F	,//	groupVolt	组压	RO	

    0x1111	,//	chargeCurrComp	充放电电流补码--取2位小数点，单位：A。 正数充电， 负数放电			
    0x1112	,//	floatChargeCurr	浮充电流	RO	
    0x1113	,//	envTempe1	环境温度1	RO	
    0x1114	,//	envTempe2	环境温度2	RO	
    0x1115	,//	maxVoltBattNo.	最高电压电池号	RO	
    0x1116	,//	minVoltBattNo.	最低电压电池号	RO	

 /*--------------------------------------------------- */     
    0x1117	,//	maxResBattNo.	最高内阻电池号	RO	
    0x1118	,//	averageDifference	均差值	RO	
    0x1119	,//	poleDifference	极差值	RO	
    0x111A	,//	minRestCap	按最低电池容量整组剩余容量	RO	
    0x111B	,//	minRestLoadTime	按最低电池容量整组带载时间	RO	
    0x111C	,//	restCap	按组压整组剩余容量	RO	
    0x111D	,//	restLoadTime	按组压整组带载时间	RO	
   /*--------------------------------------------------------*/   
    0x111E	,//	chargeStatus	电池组充放电状态	RO	

  /*---------------------------------------------------*/      

    0x111F	,//	groupAlm---4383--整组电池测量量报警状态	RO--------


////---------v1.7-----------------------------
#if  dev_battery_iot_model_ver_1_7  
    0x1110	,//	chargeCurr	充放电电流	RO	
    0x1121	,//	rippleWave	纹波	RO	
    0x1122	,//	hydrogenContent	氢气含量	RO		
    0x1124	,//	extAlm	扩展测量量报警状态	RO	
#endif

 /*---------------------------------------------------*/   


//--------蓄电池传感器物模型-v1.3-----------
    0x7530,  // 30000	cellVoltMax	最高电池电压	RO		运行参数	uint16_t		mV
    0x7531,  // 30001	cellVoltMin	最低电池电压	RO		运行参数	uint16_t		mV
    0x7532,  // 30002	cellResMax	最高电池内阻	RO		运行参数	uint16_t		微欧
//--------蓄电池传感器物模型-v1.3-----------

    0x7533,  //	30003   tempeCellMax 最高电池温度	RO		运行参数			0.1度

    //--------蓄电池传感器物模型-v1.8-----------
    0x1127	, //	battNum	电池数量	RO

      //配置参//数	  		
  /*---------------------------------------------------*/         



#if  dev_battery_iot_model_ver_1_7

    0x1128	,//	comParam1	com 电池串参数传感器映射参数1	R/W	
    0x1129	,//	addr1	addr1	R/W	
    0x112A	,//	num1	num1	R/W	
    0x112B	,//	comParam2	com 电池串参数传感器映射参数2	R/W	
    0x112C	,//	addr2	addr2	R/W	
    0x112D	,//	num2	num2	R/W	
    0x112E	,//	battScurrparam	com;      //电池串电流映射参数	R/W	
    0x112F	,//	currAddr	addr;	R/W	

    0x1130	,//	currnum	currnum;	R/W	
    0x1131	,//	volcin	volcom;   //电池串电压映射参数	R/W	
    0x1132	,//	laddr	laddr;	R/W	
    0x1133	,//	lnum	num;	R/W	

    0x1134	,//	battType	电池类型2\6\12	R/W	
    0x1135	,//	battModuleTupe	电池模块类型	R/W	

 //   0x1136	,//	battRateCap	电池额定容量	R/W	

    0x1137	,//	battStdRes	电池标准内阻	R/W	
	
 /*---------------------------------------------------*/   

    0x1139	,//	maxBattVolt	电池电压上限	R/W	
    0x113A	,//	minBattVolt	电池电压下限	R/W	
    0x113B	,//	maxBattTempe	电池温度上限	R/W	
    0x113C	,//	minBattTempe	电池温度下限	R/W	
    0x113D	,//	maxBattRes	电池内阻上限	R/W	
    0x113E	,//	minBattRes	电池内阻下限	R/W	
    0x113F	,//	minBattCap	电池容量下限	R/W	
    0x1140	,//	maxBattVoltDiff	电池电压差上限	R/W	
    0x1141	,//	maxDischargeCurr	放电电流上限	R/W	
    0x1142	,//	dischargeCurrTh	放电电流门槛	R/W	
    0x1143	,//	maxChargeCurr	充电电流上限	R/W	
    0x1144	,//	minChargeCurr	充电电流下限	R/W	
    0x1145	,//	maxFloatChargeCurr	浮充电流上限	R/W	
    0x1146	,//	maxGroupVolt	电池组电压上限	R/W	
    0x1147	,//	minGroupVolt	电池组电压下限	R/W	

  /*---------------------------------------------------*/  
    0x1148	,//	maxRippleWave	电池组文波上限	R/W	
    0x1149	,//	battResFactor	电池组内阻系数	R/W	
    0x114A	,//	resChangeCtrl	电池内阻缓变控制	R/W	
    0x114B	,//	resChangeFactor	电池内阻缓变系数	R/W	
    0x114C	,//	resOffset	电池内阻偏移量	R/W	
    0x114D	,//	rateLoadCurrProportion	额定负载电流比	R/W	
    0x114E	,//	openCircuitFactro	开路判别系数	R/W	

    // 0x1151	,//	wrProtect	写保护	R/W	
    // 0x1152	,//	resetBattMDev	复位装置	R/W	
    // 0x1153	,//	wrSysCfg	应用写定值	R/W		
    // 0x1155	,//	almCtrl	告警启停	R/W	

    0x1156	,//	stationType	站点类型	R/W	
    0x1157	,//	battSerialNum	电池串数	R/W	
    0x1158	,//	stdSampleInterval	正常采样间隔	R/W	
    0x1159	,//	chargeSampleInterval	充放电采样间隔	R/W	
    0x115A	,//	voltSampleInterval	总电压电流温度采样间隔	R/W	
    0x115B	,//	balanceCtrl	均衡控制	R/W	
    0x115C	,//	checkRes	手动测内阻	R/W	
    0x115D	,//	resetCfg	恢复出厂设置	R/W	
    0x115E	,//	restoreCfg	恢复保存设置	R/W	
    0x115F	,//	saveCfg	保存现有设置	R/W	
    0x1160	,//	version	版本号	R/W	

#endif



#if  (dev_battery_iot_model_ver_1_7 || dev_battery_iot_model_ver_1_8 )

 ////--------能同时多个写的命令----------------------------------
0x1136	,//	4406	battRateCap	电池额定容量	R/W		配置参数

0x1139	,//	4409	maxBattVolt	电池电压上限	R/W		配置参数
0x113A	,//	4410	minBattVolt	电池电压下限	R/W		配置参数
0x113B	,//	4411	maxBattTempe	电池温度上限	R/W		配置参数
0x113C	,//	4412	minBattTempe	电池温度下限	R/W		配置参数
0x113D	,//	4413	maxBattRes	电池内阻上限	R/W		配置参数
0x113E	,//	4414	minBattRes	电池内阻下限	R/W		配置参数
0x113F	,//	4415	minBattCap	电池容量下限	R/W		配置参数
0x1140	,//	4416	maxBattVoltDiff	电池电压差上限	R/W		配置参数
0x1141	,//	4417	maxDischargeCurr	放电电流上限	R/W		配置参数
0x1142	,//	4418	dischargeCurrTh	放电电流门槛	R/W		配置参数
0x1143	,//	4419	maxChargeCurr	充电电流上限	R/W		配置参数
0x1144	,//	4420	minChargeCurr	充电电流下限	R/W		配置参数
0x1145	,//	4421	maxFloatChargeCurr	浮充电流上限	R/W		配置参数
0x1146	,//	4422	maxGroupVolt	电池组电压上限	R/W		配置参数
0x1147	,//	4423	minGroupVolt	电池组电压下限	R/W		配置参数

0x1155	,//	4437	almCtrl	告警启停	R/W		配置参数


  //<<蓄电池传感器物模型-v1.9>>
 0x1156 ,// 4438	currSensorRate	电流互感器绕线圈数	R/W		配置参数	uint16_t	>=1		



 ////--------只能单个写的命令----------------------------------
0x1151	,//	4433	wrProtect	写保护	R/W		配置参数
0x1152	,//	4434	resetBattMDev	复位装置	R/W		配置参数
0x1153	,//	4435	wrSysCfg	应用写定值	R/W		配置参数


#endif

    //配置参//数							
    0x0600	,//	液位设备地址	R/W	否	配置参数	uint8_t	0~255	
    0x0602	,//	液位设备通道编号	R/W	否	配置参数	uint8_t	0~31	

  /*---------------------------------------------------*/   

  /*---------------------------------------------------*/   

    //产品信息						
    0x0801	,//	软件版本	RO	否	软件版本	string	最大32字节	
    0x0802	,//	硬件版本	RO	否	硬件版本	string	最大32字节	
    0x0803	,//	产品型号	RO	否	产品型号	string	最大32字节	
    0x0804	,//	生产信息	RO	否	生产信息	string	最大32字节	
    0x0805	,//	厂家信息	RO	否		string	最大32字节	

};

/////--------R/W属性的数据键值-名称对-----------------------------
const dev_attr_key_name_t  battery_iot_id_key_name_table[battery_iot_id_key_name_table_end]=
{
    //{0x1127,"battNum"} ,//电池数量-----目前只有这个配置参数--ver.1.5不再是R/W--改为RO----

#if dev_battery_iot_model_ver_1_8

    ////--------能同时多个写的命令----------------------------------
    {0x1136,"battRateCap"} ,//电池额定容量
    {0x1139,"maxBattVolt"} ,//电池电压上限
    {0x113A,"minBattVolt"} ,//电池电压下限
    {0x113B,"maxBattTempe"} ,//电池温度上限
    {0x113C,"minBattTempe"} ,//电池温度下限
    {0x113D,"maxBattRes"} ,//电池内阻上限
    {0x113E,"minBattRes"} ,//电池内阻下限
    {0x113F,"minBattCap"} ,//电池容量下限
    {0x1140,"maxBattVoltDiff"} ,//电池电压差上限
    {0x1141,"maxDischargeCurr"} ,//放电电流上限
    {0x1142,"dischargeCurrTh"} ,//放电电流门槛
    {0x1143,"maxChargeCurr"} ,//充电电流上限
    {0x1144,"minChargeCurr"} ,//充电电流下限
    {0x1145,"maxFloatChargeCurr"} ,//浮充电流上限
    {0x1146,"maxGroupVolt"} ,//电池组电压上限
    {0x1147,"minGroupVolt"} ,//电池组电压下限
    {0x1155,"almCtrl"} ,//告警启停

      //<<蓄电池传感器物模型-v1.9>>
    {0x1156,"currSensorRate"} ,//电流互感器绕线圈数



    ////--------只能单个写的命令----------------------------------
    {0x1151,"wrProtect"} ,//写保护
    {0x1152,"resetBattMDev"} ,//复位装置
    {0x1153,"wrSysCfg"} ,//应用写定值

#endif

#if dev_battery_iot_model_ver_1_7


    {0x1128,"comParam1"} ,//com电池串参数传感器映射参数1
    {0x1129,"addr1"} ,//addr1
    {0x112A,"num1"} ,//num1
    {0x112B,"comParam2"} ,//com电池串参数传感器映射参数2
    {0x112C,"addr2"} ,//addr2
    {0x112D,"num2"} ,//num2
    {0x112E,"battScurrparam"} ,//com;//电池串电流映射参数
    {0x112F,"currAddr"} ,//addr;
    {0x1130,"currnum"} ,//currnum;
    {0x1131,"volcin"} ,//volcom;//电池串电压映射参数
    {0x1132,"laddr"} ,//laddr;
    {0x1133,"lnum"} ,//num;
    {0x1134,"battType"} ,//电池类型2\6\12
    {0x1135,"battModuleTupe"} ,//电池模块类型
    {0x1136,"battRateCap"} ,//电池额定容量
    {0x1137,"battStdRes"} ,//电池标准内阻
    {0x1139,"maxBattVolt"} ,//电池电压上限
    {0x113A,"minBattVolt"} ,//电池电压下限
    {0x113B,"maxBattTempe"} ,//电池温度上限
    {0x113C,"minBattTempe"} ,//电池温度下限
    {0x113D,"maxBattRes"} ,//电池内阻上限
    {0x113E,"minBattRes"} ,//电池内阻下限
    {0x113F,"minBattCap"} ,//电池容量下限
    {0x1140,"maxBattVoltDiff"} ,//电池电压差上限
    {0x1141,"maxDischargeCurr"} ,//放电电流上限
    {0x1142,"dischargeCurrTh"} ,//放电电流门槛
    {0x1143,"maxChargeCurr"} ,//充电电流上限
    {0x1144,"minChargeCurr"} ,//充电电流下限
    {0x1145,"maxFloatChargeCurr"} ,//浮充电流上限
    {0x1146,"maxGroupVolt"} ,//电池组电压上限
    {0x1147,"minGroupVolt"} ,//电池组电压下限
    {0x1148,"maxRippleWave"} ,//电池组文波上限
    {0x1149,"battResFactor"} ,//电池组内阻系数
    {0x114A,"resChangeCtrl"} ,//电池内阻缓变控制
    {0x114B,"resChangeFactor"} ,//电池内阻缓变系数
    {0x114C,"resOffset"} ,//电池内阻偏移量
    {0x114D,"rateLoadCurrProportion"} ,//额定负载电流比
    {0x114E,"openCircuitFactro"} ,//开路判别系数
    {0x1151,"wrProtect"} ,//写保护
    {0x1152,"resetBattMDev"} ,//复位装置
    {0x1153,"wrSysCfg"} ,//应用写定值
    {0x1155,"almCtrl"} ,//告警启停
    {0x1156,"stationType"} ,//站点类型
    {0x1157,"battSerialNum"} ,//电池串数
    {0x1158,"stdSampleInterval"} ,//正常采样间隔
    {0x1159,"chargeSampleInterval"} ,//充放电采样间隔
    {0x115A,"voltSampleInterval"} ,//总电压电流温度采样间隔
    {0x115B,"balanceCtrl"} ,//均衡控制
    {0x115C,"checkRes"} ,//手动测内阻
    {0x115D,"resetCfg"} ,//恢复出厂设置
    {0x115E,"restoreCfg"} ,//恢复保存设置
    {0x115F,"saveCfg"} ,//保存现有设置

#endif


 #if 0    //担心socket缓冲区溢出
    {0x1160,"version"} ,//版本号
    {0x1163,"voltSensorNumCom1"} ,//COM1口组电压传感器数
    {0x1164,"currSensorNum1om1"} ,//COM1口组电流传感器数
    {0x1165,"paramSensorNumCom1"} ,//COM1口参数传感器数
    {0x1166,"sensorTypeCom1"} ,//COM1口传感器类型1.单电压。2带内阻
    {0x1167,"balancevoltCom1"} ,//COM1口通信口均衡电压
    {0x1168,"voltSensorNumCom2"} ,//COM2口组电压传感器数
    {0x1169,"currSensorNum1om2"} ,//COM2口组电流传感器数
    {0x116A,"paramSensorNumCom2"} ,//COM2口参数传感器数
    {0x116B,"sensorTypeCom2"} ,//COM2口传感器类型1.单电压。2带内阻
    {0x116C,"balancevoltCom2"} ,//COM2口通信口均衡电压
    {0x116D,"voltSensorNumCom3"} ,//COM3口组电压传感器数
    {0x116E,"currSensorNum1om3"} ,//COM3口组电流传感器数
    {0x116F,"paramSensorNumCom3"} ,//COM3口参数传感器数
    {0x1170,"sensorTypeCom3"} ,//COM3口传感器类型1.单电压。2带内阻
    {0x1171,"balancevoltCom3"} ,//COM3口通信口均衡电压
    {0x1172,"voltSensorNumCom4"} ,//COM4口组电压传感器数
    {0x1173,"currSensorNum1om4"} ,//COM4口组电流传感器数
    {0x1174,"paramSensorNumCom4"} ,//COM4口参数传感器数
    {0x1175,"sensorTypeCom4"} ,//COM4口传感器类型1.单电压。2带内阻
    {0x1176,"balancevoltCom4"} ,//COM4口通信口均衡电压
    {0x1177,"paramSensorAddrCom1"} ,//COM1口参数传感器起始地址
    {0x1178,"paramSensorAddrCom2"} ,//COM2口参数传感器起始地址
    {0x1179,"paramSensorAddrCom3"} ,//COM3口参数传感器起始地址
    {0x117A,"paramSensorAddrCom4"} ,//COM4口参数传感器起始地址
  
 # endif   
 
};



#if  0


////注意：改变 数组 battery_iot_id_table[battery_index_end]的定义-----需要同步更新  枚举变量的定义 battery_attr_index_e-------
const static uint16_t  battery_iot_id_table[battery_index_end]=
{
    //iot_id(hex)	,	name	R/W	变化上报	分类	数据类型	范围	单位	默认值		
    //	运行参数					

    0x110F	,//	groupVolt	组压	RO	
    0x1110	,//	chargeCurr	充放电电流	RO	
//    0x1111	,//	chargeCurrComp	充放电电流补码		
    0x1112	,//	floatChargeCurr	浮充电流	RO	
    0x1113	,//	envTempe1	环境温度1	RO	
    0x1114	,//	envTempe2	环境温度2	RO	
    0x1115	,//	maxVoltBattNo.	最高电压电池号	RO	
    0x1116	,//	minVoltBattNo.	最低电压电池号	RO	

 /*---------------------------------------------------   
    0x1117	,//	maxResBattNo.	最高内阻电池号	RO	
    0x1118	,//	averageDifference	均差值	RO	
    0x1119	,//	poleDifference	极差值	RO	
    0x111A	,//	minRestCap	按最低电池容量整组剩余容量	RO	
    0x111B	,//	minRestLoadTime	按最低电池容量整组带载时间	RO	
    0x111C	,//	restCap	按组压整组剩余容量	RO	
    0x111D	,//	restLoadTime	按组压整组带载时间	RO	
  ---------------------------------------------------    -----*/   
    0x111E	,//	chargeStatus	电池组充放电状态	RO	

  /*---------------------------------------------------   

    0x111F	,//	groupAlm	整组电池测量量报警状态	RO			
    0x1121	,//	rippleWave	纹波	RO	
    0x1122	,//	hydrogenContent	氢气含量	RO	
	
    0x1124	,//	extAlm	扩展测量量报警状态	RO	
---------------------------------------------------*/   

      //配置参//数	  		
  /*---------------------------------------------------      
    0x1127	,//	battNum	电池数量	R/W	
    0x1128	,//	comParam1	com 电池串参数传感器映射参数1	R/W	
    0x1129	,//	addr1	addr1	R/W	
    0x112A	,//	num1	num1	R/W	
    0x112B	,//	comParam2	com 电池串参数传感器映射参数2	R/W	
    0x112C	,//	addr2	addr2	R/W	
    0x112D	,//	num2	num2	R/W	
    0x112E	,//	battScurrparam	com;      //电池串电流映射参数	R/W	
    0x112F	,//	currAddr	addr;	R/W	
    0x1130	,//	currnum	currnum;	R/W	

    0x1131	,//	volcin	volcom;   //电池串电压映射参数	R/W	
    0x1132	,//	laddr	laddr;	R/W	
    0x1133	,//	lnum	num;	R/W	
    0x1134	,//	battType	电池类型2\6\12	R/W	
    0x1135	,//	battModuleTupe	电池模块类型	R/W	
    0x1136	,//	battRateCap	电池额定容量	R/W	
    0x1137	,//	battStdRes	电池标准内阻	R/W	
	
---------------------------------------------------*/   
    //配置参//数							
    0x0600	,//	液位设备地址	R/W	否	配置参数	uint8_t	0~255	
    0x0602	,//	液位设备通道编号	R/W	否	配置参数	uint8_t	0~31	
    0x1139	,//	maxBattVolt	电池电压上限	R/W	
    0x113A	,//	minBattVolt	电池电压下限	R/W	
    0x113B	,//	maxBattTempe	电池温度上限	R/W	
    0x113C	,//	minBattTempe	电池温度下限	R/W	
    0x113D	,//	maxBattRes	电池内阻上限	R/W	
    0x113E	,//	minBattRes	电池内阻下限	R/W	


 /*---------------------------------------------------
    0x113F	,//	minBattCap	电池容量下限	R/W	
    0x1140	,//	maxBattVoltDiff	电池电压差上限	R/W	
    0x1141	,//	maxDischargeCurr	放电电流上限	R/W	
    0x1142	,//	dischargeCurrTh	放电电流门槛	R/W	
    0x1143	,//	maxChargeCurr	充电电流上限	R/W	
    0x1144	,//	minChargeCurr	充电电流下限	R/W	

    0x1145	,//	maxFloatChargeCurr	浮充电流上限	R/W	
    0x1146	,//	maxGroupVolt	电池组电压上限	R/W	
    0x1147	,//	minGroupVolt	电池组电压下限	R/W	
    0x1148	,//	maxRippleWave	电池组文波上限	R/W	
    0x1149	,//	battResFactor	电池组内阻系数	R/W	
    0x114A	,//	resChangeCtrl	电池内阻缓变控制	R/W	
    0x114B	,//	resChangeFactor	电池内阻缓变系数	R/W	
    0x114C	,//	resOffset	电池内阻偏移量	R/W	
    0x114D	,//	rateLoadCurrProportion	额定负载电流比	R/W	
    0x114E	,//	openCircuitFactro	开路判别系数	R/W	

    0x1151	,//	wrProtect	写保护	R/W	
    0x1152	,//	resetBattMDev	复位装置	R/W	
    0x1153	,//	wrSysCfg	应用写定值	R/W	
	
    0x1155	,//	almCtrl	告警启停	R/W	
    0x1156	,//	stationType	站点类型	R/W	
    0x1157	,//	battSerialNum	电池串数	R/W	
    0x1158	,//	stdSampleInterval	正常采样间隔	R/W	
    0x1159	,//	chargeSampleInterval	充放电采样间隔	R/W	
    0x115A	,//	voltSampleInterval	总电压电流温度采样间隔	R/W	
    0x115B	,//	balanceCtrl	均衡控制	R/W	
    0x115C	,//	checkRes	手动测内阻	R/W	
    0x115D	,//	resetCfg	恢复出厂设置	R/W	
    0x115E	,//	restoreCfg	恢复保存设置	R/W	
    0x115F	,//	saveCfg	保存现有设置	R/W	
    0x1160	,//	version	版本号	R/W	

 ---------------------------------------------------*/   


    //产品信息						
    0x0801	,//	软件版本	RO	否	软件版本	string	最大32字节	
    0x0802	,//	硬件版本	RO	否	硬件版本	string	最大32字节	
    0x0803	,//	产品型号	RO	否	产品型号	string	最大32字节	
    0x0804	,//	生产信息	RO	否	生产信息	string	最大32字节	
    0x0805	,//	厂家信息	RO	否		string	最大32字节	

};


#endif




 static battery_attr_t battery_obj[BATTERY_NODE_NUM_MAX];   /////下标与 配置节点数据结构一一对应 iot_NodeConfigObj_u   iot_NodeConfigObj;

#if 1
static  battery_attr_t battery_attr_default={


/////------测试数据-------------------------
 //   .data.level_mm = 50728, //0.01mm



/////------56H	版本号‘V’--------------
    .info.soft_ver="sV2.0",
    .info.hard_ver="hV2.0",// 

    .info.product_model="JTY-GD-ZS209",       //
    .info.production_info="rs485",    // 485型
    .info.manufacturer="PRSS",        //4Bh==公司识别码’K’--普锐森社光电感烟火灾探测报警器（ZS209）


    .config={//default value, do not delete

       .addr    = 1,
       .channel = dev_chan_485_2,

    },


};


#endif



/**
 * @brief 
 * 
 */
void battery_param_init(void)
{
 #if 0   
    snprintf(battery_attr.info.soft_ver, sizeof(battery_attr.info.soft_ver),"%s sv%04X %s",SDK_VER_STR,app_get_ver(),__DATE__);
    snprintf(battery_attr.info.hard_ver, sizeof(battery_attr.info.hard_ver),"%s",HARDWARE_STR);
    snprintf(battery_attr.info.production_info, sizeof(battery_attr.info.production_info),"%s","2024-08-p01");
#endif

}


#if 1
//还需要检测配置参数是否合理----设备地址，通道编号---量程
uint8_t battery_add_obj(uint8_t idx,uint8_t channel,uint8_t addr)
{

//还需要检测配置参数是否合理----设备地址，通道编号---量程
//  battery_max_scale_0_01mm   (100000U)    //1000mm===1000x100 (0.01mm)

    LOG_NAME();

   if( (addr>battery_max_dev_addr) || (channel>battery_max_channel) )
   {
        return 0;
   }



    battery_attr_default.config.addr    = addr;
    battery_attr_default.config.channel = channel;

    battery_set_obj( idx, (battery_attr_t*)&battery_attr_default ) ; 

 return 1;

}

#endif


/**
 * @brief 根据下标，获取iot_id 的编号
 * 
 * @param idx 
 */
uint16_t  battery_get_iot_id(uint8_t idx)
{
    return  battery_iot_id_table[idx] ;
}




/**
 * @brief 
 * 
 * @param in idx 
 * @return battery_attr_t ==NULL 查询出错,   !NULL 查询ok
 */
battery_attr_t*  battery_get_obj(uint8_t idx)   
{
    return  &battery_obj[idx];
}



/**
 * @brief battery_set_obj() 赋值节点数据
 * 
 * @param in idx
 * @param in p_attr
 * @return 0=失败，1=成功 
 */
uint8_t  battery_set_obj(uint8_t idx,battery_attr_t* p_attr )  
{
    if( idx>=BATTERY_NODE_NUM_MAX )
    {
        return 0;
    } 

    battery_obj[idx] = *p_attr;

 return 1 ;

}




/**
 * @brief 
 * 
 * @param attr_id 
 * @param attr_out 
 */
void battery_get_attr(uint8_t idx,uint16_t attr_id, IotModel* attr_out)
{
    attr_out->iot_id = attr_id;//传给服务器
    

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:battery idx outof range\n"); 
       return ;
    }


    switch(attr_id)
    {
        //////---------RO--------------------------//////////////////////

        // case 0x0520: //0x0520	烟雾报警信息
        // {    
        //     attr_out->value = battery_obj[idx].data.alarm.value;
        // }  break;

        //////---------RO--------------------------//////////////////////


        case 0x0FE2: //	battAlmTotal	电池报警状态汇总	RO	
        {
            attr_out->value = battery_obj[idx].data.battAlmTotal;
        } break;


        case 0x110F: //groupVolt	组压	RO	
        {    
            attr_out->value = battery_obj[idx].data.groupVolt;
        }  break;

       case 0x1111: //	chargeCurrComp	充放电电流补码		
       {
           attr_out->value = battery_obj[idx].data.chargeCurrComp;
       } break;
       case 0x1112: //	floatChargeCurr	浮充电流	RO	
       {
           attr_out->value = battery_obj[idx].data.floatChargeCurr;
       } break;
       case 0x1113: //	envTempe1	环境温度1	RO	
       {
           attr_out->value = battery_obj[idx].data.envTempe1;
       } break;
       case 0x1114: //	envTempe2	环境温度2	RO	
       {
           attr_out->value = battery_obj[idx].data.envTempe2;
       } break;
       case 0x1115: //	maxVoltBattNo.	最高电压电池号	RO	
       {
           attr_out->value = battery_obj[idx].data.maxVoltBattNo;
       } break;
       case 0x1116: //	minVoltBattNo.	最低电压电池号	RO	
       {
           attr_out->value = battery_obj[idx].data.minVoltBattNo;
       } break;
       case 0x1117: //	maxResBattNo.	最高内阻电池号	RO	
       {
           attr_out->value = battery_obj[idx].data.maxResBattNo;
       } break;
       case 0x1118: //	averageDifference	均差值	RO	
       {
           attr_out->value = battery_obj[idx].data.averageDifference;
       } break;
       case 0x1119: //	poleDifference	极差值	RO	
       {
           attr_out->value = battery_obj[idx].data.poleDifference;
       } break;
       case 0x111A: //	minRestCap	按最低电池容量整组剩余容量	RO	
       {
           attr_out->value = battery_obj[idx].data.minRestCap;
       } break;
       case 0x111B: //	minRestLoadTime	按最低电池容量整组带载时间	RO	
       {
           attr_out->value = battery_obj[idx].data.minRestLoadTime;
       } break;
       case 0x111C: //	restCap	按组压整组剩余容量	RO	
       {
           attr_out->value = battery_obj[idx].data.restCap;
       } break;
       case 0x111D: //	restLoadTime	按组压整组带载时间	RO	
       {
           attr_out->value = battery_obj[idx].data.restLoadTime;
       } break;
       case 0x111E: //	chargeStatus	电池组充放电状态	RO	
       {
           attr_out->value = battery_obj[idx].data.chargeStatus;
       } break;
       case 0x111F: //	groupAlm	整组电池测量量报警状态	RO	
       {
           attr_out->value = battery_obj[idx].data.groupAlm;
       } break;


////---------v1.7-----------------------------
#if  dev_battery_iot_model_ver_1_7  
       case 0x1110: //	chargeCurr	充放电电流	RO	
       {
           attr_out->value = battery_obj[idx].data.chargeCurr;
       } break;


       case 0x1121: //	rippleWave	纹波	RO	
       {
           attr_out->value = battery_obj[idx].data.rippleWave;
       } break;
       case 0x1122: //	hydrogenContent	氢气含量	RO	
       {
           attr_out->value = battery_obj[idx].data.hydrogenContent;
       } break;
       case 0x1124: //	extAlm	扩展测量量报警状态	RO	
       {
           attr_out->value = battery_obj[idx].data.extAlm;
       } break;

#endif


       case 0x7530: //	cellVoltMax	扩展测量量报警状态	RO	
       {
           attr_out->value = battery_obj[idx].data.cellVoltMax;
       } break;

       case 0x7531: //	cellVoltMin	扩展测量量报警状态	RO	
       {
           attr_out->value = battery_obj[idx].data.cellVoltMin;
       } break;

       case 0x7532: //	cellResMax	扩展测量量报警状态	RO	
       {
           attr_out->value = battery_obj[idx].data.cellResMax;
       } break;
       //--------蓄电池传感器物模型-v1.3----------

       case 0x7533: //30003  tempeCellMax 最高电池温度	0.1度
       {
           attr_out->value = battery_obj[idx].data.tempeCellMax;
       } break;

       //--------蓄电池传感器物模型-v1.5-----------
       

       case 0x1127 :  //	battNum	电池数量	RO	
       {
            attr_out->value = battery_obj[idx].data.battNum;
       }  break;




        //////---------R/W--------------------------//////////////////////
        case 0x0600:
        {
            attr_out->value = battery_obj[idx].config.addr;
        }  break;

        case 0x0602:
        {
            attr_out->value = battery_obj[idx].config.channel;
        }  break;



  //配置参//数	  		
  
#if  (dev_battery_iot_model_ver_1_7 )


       case 0x1128 :  //	comParam1	com 电池串参数传感器映射参数1	R/W	
       {
            attr_out->value = battery_obj[idx].config.comParam1;
       }  break;

       case 0x1129 :  //	addr1	addr1	R/W	
       {
            attr_out->value = battery_obj[idx].config.addr1;
       }  break;

       case 0x112A :  //	num1	num1	R/W	
       {
            attr_out->value = battery_obj[idx].config.num1;
       }  break;

       case 0x112B :  //	comParam2	com 电池串参数传感器映射参数2	R/W	
       {
            attr_out->value = battery_obj[idx].config.comParam2;
       }  break;

       case 0x112C :  //	addr2	addr2	R/W	
       {
            attr_out->value = battery_obj[idx].config.addr2;
       }  break;

       case 0x112D :  //	num2	num2	R/W	
       {
            attr_out->value = battery_obj[idx].config.num2;
       }  break;

       case 0x112E :  //	battScurrparam	com;      //电池串电流映射参数	R/W	
       {
            attr_out->value = battery_obj[idx].config.battScurrparam;
       }  break;

       case 0x112F :  //	currAddr	addr;	R/W	
       {
            attr_out->value = battery_obj[idx].config.currAddr;
       }  break;

       case 0x1130 :  //	currnum	currnum;	R/W	
       {
            attr_out->value = battery_obj[idx].config.currnum;
       }  break;

       case 0x1131 :  //	volcin	volcom;   //电池串电压映射参数	R/W	
       {
            attr_out->value = battery_obj[idx].config.volcin;
       }  break;

       case 0x1132 :  //	laddr	laddr;	R/W	
       {
            attr_out->value = battery_obj[idx].config.laddr;
       }  break;

       case 0x1133 :  //	lnum	num;	R/W	
       {
            attr_out->value = battery_obj[idx].config.lnum;
       }  break;

       case 0x1134 :  //	battType	电池类型2\6\12	R/W	
       {
            attr_out->value = battery_obj[idx].config.battType;
       }  break;

       case 0x1135 :  //	battModuleTupe	电池模块类型	R/W	
       {
            attr_out->value = battery_obj[idx].config.battModuleTupe;
       }  break;

       case 0x1137 :  //	battStdRes	电池标准内阻	R/W								
       {
            attr_out->value = battery_obj[idx].config.battStdRes;
       }  break;


#endif 

#if  (dev_battery_iot_model_ver_1_7 || dev_battery_iot_model_ver_1_8 )

       case 0x1136 :  //	battRateCap	电池额定容量	R/W	
       {
            attr_out->value = battery_obj[idx].config.battRateCap;
       }  break;


       case 0x1139 :  //	maxBattVolt	电池电压上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxBattVolt;
       }  break;

       case 0x113A :  //	minBattVolt	电池电压下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minBattVolt;
       }  break;

       case 0x113B :  //	maxBattTempe	电池温度上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxBattTempe;
       }  break;

       case 0x113C :  //	minBattTempe	电池温度下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minBattTempe;
       }  break;

       case 0x113D :  //	maxBattRes	电池内阻上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxBattRes;
       }  break;

       case 0x113E :  //	minBattRes	电池内阻下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minBattRes;
       }  break;

       case 0x113F :  //	minBattCap	电池容量下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minBattCap;
       }  break;

       case 0x1140 :  //	maxBattVoltDiff	电池电压差上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxBattVoltDiff;
       }  break;

       case 0x1141 :  //	maxDischargeCurr	放电电流上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxDischargeCurr;
       }  break;

       case 0x1142 :  //	dischargeCurrTh	放电电流门槛	R/W	
       {
            attr_out->value = battery_obj[idx].config.dischargeCurrTh;
       }  break;

       case 0x1143 :  //	maxChargeCurr	充电电流上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxChargeCurr;
       }  break;

       case 0x1144 :  //	minChargeCurr	充电电流下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minChargeCurr;
       }  break;

       case 0x1145 :  //	maxFloatChargeCurr	浮充电流上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxFloatChargeCurr;
       }  break;

       case 0x1146 :  //	maxGroupVolt	电池组电压上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxGroupVolt;
       }  break;

       case 0x1147 :  //	minGroupVolt	电池组电压下限	R/W	
       {
            attr_out->value = battery_obj[idx].config.minGroupVolt;
       }  break;

#endif


#if  (dev_battery_iot_model_ver_1_7 )


       case 0x1148 :  //	maxRippleWave	电池组文波上限	R/W	
       {
            attr_out->value = battery_obj[idx].config.maxRippleWave;
       }  break;

       case 0x1149 :  //	battResFactor	电池组内阻系数	R/W	
       {
            attr_out->value = battery_obj[idx].config.battResFactor;
       }  break;

       case 0x114A :  //	resChangeCtrl	电池内阻缓变控制	R/W	
       {
            attr_out->value = battery_obj[idx].config.resChangeCtrl;
       }  break;

       case 0x114B :  //	resChangeFactor	电池内阻缓变系数	R/W	
       {
            attr_out->value = battery_obj[idx].config.resChangeFactor;
       }  break;

       case 0x114C :  //	resOffset	电池内阻偏移量	R/W	
       {
            attr_out->value = battery_obj[idx].config.resOffset;
       }  break;

       case 0x114D :  //	rateLoadCurrProportion	额定负载电流比	R/W	
       {
            attr_out->value = battery_obj[idx].config.rateLoadCurrProportion;
       }  break;

       case 0x114E :  //	openCircuitFactro	开路判别系数	R/W	
       {
            attr_out->value = battery_obj[idx].config.openCircuitFactro;
       }  break;

#endif

#if  (dev_battery_iot_model_ver_1_7 || dev_battery_iot_model_ver_1_8 )

       case 0x1151 :  //	wrProtect	写保护	R/W	
       {
            attr_out->value = battery_obj[idx].config.wrProtect;
       }  break;

       case 0x1152 :  //	resetBattMDev	复位装置	R/W	
       {
            attr_out->value = battery_obj[idx].config.resetBattMDev;
       }  break;

       case 0x1153 :  //	wrSysCfg	应用写定值	R/W	
       {
            attr_out->value = battery_obj[idx].config.wrSysCfg;
       }  break;

       case 0x1155 :  //	almCtrl	告警启停	R/W	
       {
            attr_out->value = battery_obj[idx].config.almCtrl;
       }  break;


  //<<蓄电池传感器物模型-v1.9>>
      case 0x1156 :// 4438	currSensorRate	电流互感器绕线圈数	R/W	
       {
            attr_out->value = battery_obj[idx].config.currSensorRate;
       }  break;


#endif


#if  (dev_battery_iot_model_ver_1_7 )
       case 0x1156 :  //	stationType	站点类型	R/W	
       {
            attr_out->value = battery_obj[idx].config.stationType;
       }  break;

       case 0x1157 :  //	battSerialNum	电池串数	R/W	
       {
            attr_out->value = battery_obj[idx].config.battSerialNum;
       }  break;

       case 0x1158 :  //	stdSampleInterval	正常采样间隔	R/W	
       {
            attr_out->value = battery_obj[idx].config.stdSampleInterval;
       }  break;

       case 0x1159 :  //	chargeSampleInterval	充放电采样间隔	R/W	
       {
            attr_out->value = battery_obj[idx].config.chargeSampleInterval;
       }  break;

       case 0x115A :  //	voltSampleInterval	总电压电流温度采样间隔	R/W	
       {
            attr_out->value = battery_obj[idx].config.voltSampleInterval;
       }  break;

       case 0x115B :  //	balanceCtrl	均衡控制	R/W	
       {
            attr_out->value = battery_obj[idx].config.balanceCtrl;
       }  break;

       case 0x115C :  //	checkRes	手动测内阻	R/W	
       {
            attr_out->value = battery_obj[idx].config.checkRes;
       }  break;

       case 0x115D :  //	resetCfg	恢复出厂设置	R/W	
       {
            attr_out->value = battery_obj[idx].config.resetCfg;
       }  break;

       case 0x115E :  //	restoreCfg	恢复保存设置	R/W	
       {
            attr_out->value = battery_obj[idx].config.restoreCfg;
       }  break;

       case 0x115F :  //	saveCfg	保存现有设置	R/W	
       {
            attr_out->value = battery_obj[idx].config.saveCfg;
       }  break;

       case 0x1160 :  //	version	版本号	R/W	
       {
            attr_out->value = battery_obj[idx].config.version;
       }  break;

#endif
        //////---------R/W--------------------------//////////////////////



// 0x0801	软件版本
// 0x0802	硬件版本
// 0x0803	产品型号
// 0x0804	生产信息
// 0x0805	厂家信息

        //////---------RO--------------------------//////////////////////
        // case 0x0800://0x0800	产品类型	RO	否	产品类型	uint16_t
        // {
        //     attr_out->value = CTK_PID;
        // }  break;

        case 0x0801:
        {
            attr_out->values.size = strlen(battery_obj[idx].info.soft_ver);
            strncpy((char*)attr_out->values.bytes,battery_obj[idx].info.soft_ver,32);
        }  break;
        case 0x0802:
        {
            attr_out->values.size = strlen(battery_obj[idx].info.hard_ver);
            strncpy((char*)attr_out->values.bytes,battery_obj[idx].info.hard_ver,32);
        }  break;

        case 0x0803:
        {
            attr_out->values.size = strlen(battery_obj[idx].info.product_model);
            strncpy((char*)attr_out->values.bytes,battery_obj[idx].info.product_model,32);
        }  break;

        case 0x0804:
        {
            attr_out->values.size = strlen(battery_obj[idx].info.production_info);
            strncpy((char*)attr_out->values.bytes,battery_obj[idx].info.production_info,32);
        }  break;

        case 0x0805:
        {
            attr_out->values.size = strlen(battery_obj[idx].info.manufacturer);
            strncpy((char*)attr_out->values.bytes,battery_obj[idx].info.manufacturer,32);
        }  break;
        //////---------RO--------------------------//////////////////////


       default: 
           break;

    }

}

/**
 * @brief 
 * 
 * @param attr_in 
 * @return uint8_t 
 */
uint8_t battery_set_attr(uint8_t idx,IotModel* attr)
{
uint8_t ret  = 0;

//dev_mod_info_t info;


    //printf_log(lv0,"set addr %04X, value = %d\n", attr->iot_id, attr->value);////printf_log

    logout("set addr %04X, value = %lu\n", attr->iot_id, attr->value);

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:battery idx outof range\n"); 
       return 0;
    }

   //  memset((uint8_t*)&info,0,sizeof(dev_mod_info_t ) );

    // info.node_type = 1;
    // info.channel   = 2;
    // info.chan_addr = 1;

 //    iot_get_mod_info_with_index( idx ,&info);
//got info: chan_addr=1,channel=2,node_type=53254,indx=1
  // info.node_type = 1;

    switch( attr->iot_id )
    {

        case 0x0FE2: //	battAlmTotal	电池报警状态汇总	RO	
        {
            battery_obj[idx].data.battAlmTotal  = attr->value ;
        } break;

        //////--------对与上行是只读-RO-----------对与下行是只写-WO--------------------//////////////////////
        case 0x110F: //groupVolt	组压	RO	
        {    
           battery_obj[idx].data.groupVolt = attr->value ;
        }  break;

       case 0x1111: //	chargeCurrComp	充放电电流补码		
       {
          battery_obj[idx].data.chargeCurrComp = attr->value ;
       } break;
       case 0x1112: //	floatChargeCurr	浮充电流	RO	
       {
          battery_obj[idx].data.floatChargeCurr = attr->value ;
       } break;
       case 0x1113: //	envTempe1	环境温度1	RO	
       {
          battery_obj[idx].data.envTempe1 = attr->value ;
       } break;
       case 0x1114: //	envTempe2	环境温度2	RO	
       {
          battery_obj[idx].data.envTempe2 = attr->value ;
       } break;
       case 0x1115: //	maxVoltBattNo.	最高电压电池号	RO	
       {
          battery_obj[idx].data.maxVoltBattNo = attr->value ;
       } break;
       case 0x1116: //	minVoltBattNo.	最低电压电池号	RO	
       {
          battery_obj[idx].data.minVoltBattNo = attr->value ;
       } break;
       case 0x1117: //	maxResBattNo.	最高内阻电池号	RO	
       {
          battery_obj[idx].data.maxResBattNo = attr->value ;
       } break;
       case 0x1118: //	averageDifference	均差值	RO	
       {
          battery_obj[idx].data.averageDifference = attr->value ;
       } break;
       case 0x1119: //	poleDifference	极差值	RO	
       {
          battery_obj[idx].data.poleDifference = attr->value ;
       } break;
       case 0x111A: //	minRestCap	按最低电池容量整组剩余容量	RO	
       {
          battery_obj[idx].data.minRestCap = attr->value ;
       } break;
       case 0x111B: //	minRestLoadTime	按最低电池容量整组带载时间	RO	
       {
          battery_obj[idx].data.minRestLoadTime = attr->value ;
       } break;
       case 0x111C: //	restCap	按组压整组剩余容量	RO	
       {
          battery_obj[idx].data.restCap = attr->value ;
       } break;
       case 0x111D: //	restLoadTime	按组压整组带载时间	RO	
       {
          battery_obj[idx].data.restLoadTime = attr->value ;
       } break;
       case 0x111E: //	chargeStatus	电池组充放电状态	RO	
       {
          battery_obj[idx].data.chargeStatus = attr->value ;
       } break;
       case 0x111F: //	groupAlm	整组电池测量量报警状态	RO	
       {
          battery_obj[idx].data.groupAlm = attr->value ;
       } break;


    ////---------v1.7-----------------------------
#if  dev_battery_iot_model_ver_1_7  
       case 0x1110: //	chargeCurr	充放电电流	RO	
       {
          battery_obj[idx].data.chargeCurr = attr->value ;
       } break;

       case 0x1121: //	rippleWave	纹波	RO	
       {
          battery_obj[idx].data.rippleWave = attr->value ;
       } break;
       case 0x1122: //	hydrogenContent	氢气含量	RO	
       {
          battery_obj[idx].data.hydrogenContent = attr->value ;
       } break;
       case 0x1124: //	extAlm	扩展测量量报警状态	RO	
       {
          battery_obj[idx].data.extAlm = attr->value ;
       } break;

#endif


       case 0x7530: //	cellVoltMax	扩展测量量报警状态	RO	
       {
          battery_obj[idx].data.cellVoltMax = attr->value ;
       } break;

       case 0x7531: //	cellVoltMin	扩展测量量报警状态	RO	
       {
          battery_obj[idx].data.cellVoltMin = attr->value ;
       } break;

       case 0x7532: //	cellResMax	扩展测量量报警状态	RO	
       {
          battery_obj[idx].data.cellResMax = attr->value ;
       } break;

       //--------蓄电池传感器物模型-v1.3----------

       case 0x7533: //30003  tempeCellMax 最高电池温度	0.1度
       {
          battery_obj[idx].data.tempeCellMax = attr->value ;
       } break;

       //--------蓄电池传感器物模型-v1.5-----------
       
       case 0x1127 :  //	battNum	电池数量	RO	
       {
           battery_obj[idx].data.battNum = attr->value ;
       }  break;



        //////---------R/W--------------------------//////////////////////
        case 0x0600:
        {
           battery_obj[idx].config.addr = attr->value ;
        }  break;

        case 0x0602:
        {
           battery_obj[idx].config.channel = attr->value ;
        }  break;


       //配置参数	  		
  


#if  (dev_battery_iot_model_ver_1_7 )


       case 0x1128 :  //	comParam1	com 电池串参数传感器映射参数1	R/W	
       {
           battery_obj[idx].config.comParam1 = attr->value ;
       }  break;

       case 0x1129 :  //	addr1	addr1	R/W	
       {
           battery_obj[idx].config.addr1 = attr->value ;
       }  break;

       case 0x112A :  //	num1	num1	R/W	
       {
           battery_obj[idx].config.num1 = attr->value ;
       }  break;

       case 0x112B :  //	comParam2	com 电池串参数传感器映射参数2	R/W	
       {
           battery_obj[idx].config.comParam2 = attr->value ;
       }  break;

       case 0x112C :  //	addr2	addr2	R/W	
       {
           battery_obj[idx].config.addr2 = attr->value ;
       }  break;

       case 0x112D :  //	num2	num2	R/W	
       {
           battery_obj[idx].config.num2 = attr->value ;
       }  break;

       case 0x112E :  // //电池串电流映射参数	R/W	
       {
           battery_obj[idx].config.battScurrparam = attr->value  = attr->value ;
       }  break;

       case 0x112F :  //	
       {
           battery_obj[idx].config.currAddr = attr->value ;
       }  break;

       case 0x1130 :  //	R/W	
       {
           battery_obj[idx].config.currnum = attr->value ;
       }  break;

       case 0x1131 :  //  //电池串电压映射参数	R/W	
       {
           battery_obj[idx].config.volcin = attr->value ;
       }  break;

       case 0x1132 :  //	
       {
           battery_obj[idx].config.laddr = attr->value ;
       }  break;

       case 0x1133 :  //	
       {
           battery_obj[idx].config.lnum = attr->value ;
       }  break;

       case 0x1134 :  //	battType	电池类型2\6\12	R/W	
       {
           battery_obj[idx].config.battType = attr->value ;
       }  break;

       case 0x1135 :  //	battModuleTupe	电池模块类型	R/W	
       {
           battery_obj[idx].config.battModuleTupe = attr->value ;
       }  break;


       case 0x1137 :  //	battStdRes	电池标准内阻	R/W								
       {
           battery_obj[idx].config.battStdRes = attr->value ;
       }  break;

#endif


#if  (dev_battery_iot_model_ver_1_7 || dev_battery_iot_model_ver_1_8 )


       case 0x1136 :  //	battRateCap	电池额定容量	R/W	
       {
           battery_obj[idx].config.battRateCap = attr->value ;
       }  break;



       case 0x1139 :  //	maxBattVolt	电池电压上限	R/W	
       {
           battery_obj[idx].config.maxBattVolt = attr->value ;
       }  break;

       case 0x113A :  //	minBattVolt	电池电压下限	R/W	
       {
           battery_obj[idx].config.minBattVolt = attr->value ;
       }  break;

       case 0x113B :  //	maxBattTempe	电池温度上限	R/W	
       {
           battery_obj[idx].config.maxBattTempe = attr->value ;
       }  break;

       case 0x113C :  //	minBattTempe	电池温度下限	R/W	
       {
           battery_obj[idx].config.minBattTempe = attr->value ;
       }  break;

       case 0x113D :  //	maxBattRes	电池内阻上限	R/W	
       {
           battery_obj[idx].config.maxBattRes = attr->value ;
       }  break;

       case 0x113E :  //	minBattRes	电池内阻下限	R/W	
       {
           battery_obj[idx].config.minBattRes = attr->value ;
       }  break;

       case 0x113F :  //	minBattCap	电池容量下限	R/W	
       {
           battery_obj[idx].config.minBattCap = attr->value ;
       }  break;

       case 0x1140 :  //	maxBattVoltDiff	电池电压差上限	R/W	
       {
           battery_obj[idx].config.maxBattVoltDiff = attr->value ;
       }  break;

       case 0x1141 :  //	maxDischargeCurr	放电电流上限	R/W	
       {
           battery_obj[idx].config.maxDischargeCurr = attr->value ;
       }  break;

       case 0x1142 :  //	dischargeCurrTh	放电电流门槛	R/W	
       {
           battery_obj[idx].config.dischargeCurrTh = attr->value ;
       }  break;

       case 0x1143 :  //	maxChargeCurr	充电电流上限	R/W	
       {
           battery_obj[idx].config.maxChargeCurr = attr->value ;
       }  break;

       case 0x1144 :  //	minChargeCurr	充电电流下限	R/W	
       {
           battery_obj[idx].config.minChargeCurr = attr->value ;
       }  break;

       case 0x1145 :  //	maxFloatChargeCurr	浮充电流上限	R/W	
       {
           battery_obj[idx].config.maxFloatChargeCurr = attr->value ;
       }  break;

       case 0x1146 :  //	maxGroupVolt	电池组电压上限	R/W	
       {
           battery_obj[idx].config.maxGroupVolt = attr->value ;
       }  break;

       case 0x1147 :  //	minGroupVolt	电池组电压下限	R/W	
       {
           battery_obj[idx].config.minGroupVolt = attr->value ;
       }  break;

#endif

#if  (dev_battery_iot_model_ver_1_7  )

       case 0x1148 :  //	maxRippleWave	电池组文波上限	R/W	
       {
           battery_obj[idx].config.maxRippleWave = attr->value ;
       }  break;

       case 0x1149 :  //	battResFactor	电池组内阻系数	R/W	
       {
           battery_obj[idx].config.battResFactor = attr->value ;
       }  break;

       case 0x114A :  //	resChangeCtrl	电池内阻缓变控制	R/W	
       {
           battery_obj[idx].config.resChangeCtrl = attr->value ;
       }  break;

       case 0x114B :  //	resChangeFactor	电池内阻缓变系数	R/W	
       {
           battery_obj[idx].config.resChangeFactor = attr->value ;
       }  break;

       case 0x114C :  //	resOffset	电池内阻偏移量	R/W	
       {
           battery_obj[idx].config.resOffset = attr->value ;
       }  break;

       case 0x114D :  //	rateLoadCurrProportion	额定负载电流比	R/W	
       {
           battery_obj[idx].config.rateLoadCurrProportion = attr->value ;
       }  break;

       case 0x114E :  //	openCircuitFactro	开路判别系数	R/W	
       {
           battery_obj[idx].config.openCircuitFactro = attr->value ;
       }  break ;

#endif


#if  (dev_battery_iot_model_ver_1_7 || dev_battery_iot_model_ver_1_8 )

       case 0x1151 :  //	wrProtect	写保护	R/W	
       {
           battery_obj[idx].config.wrProtect = attr->value ;
       }  break;

       case 0x1152 :  //	resetBattMDev	复位装置	R/W	
       {
           battery_obj[idx].config.resetBattMDev = attr->value ;
       }  break;

       case 0x1153 :  //	wrSysCfg	应用写定值	R/W	
       {
           battery_obj[idx].config.wrSysCfg = attr->value ;
       }  break;

       case 0x1155 :  //	almCtrl	告警启停	R/W	
       {
           battery_obj[idx].config.almCtrl = attr->value ;
       }  break;

 //<<蓄电池传感器物模型-v1.9>>
       case 0x1156 :  //4438	currSensorRate	电流互感器绕线圈数	R/W	
       {
           battery_obj[idx].config.currSensorRate = attr->value ;
       }  break;

#endif


#if  (dev_battery_iot_model_ver_1_7 )

       case 0x1156 :  //	stationType	站点类型	R/W	
       {
           battery_obj[idx].config.stationType = attr->value ;
       }  break;

       case 0x1157 :  //	battSerialNum	电池串数	R/W	
       {
           battery_obj[idx].config.battSerialNum = attr->value ;
       }  break;

       case 0x1158 :  //	stdSampleInterval	正常采样间隔	R/W	
       {
           battery_obj[idx].config.stdSampleInterval = attr->value ;
       }  break;

       case 0x1159 :  //	chargeSampleInterval	充放电采样间隔	R/W	
       {
           battery_obj[idx].config.chargeSampleInterval = attr->value ;
       }  break;

       case 0x115A :  //	voltSampleInterval	总电压电流温度采样间隔	R/W	
       {
           battery_obj[idx].config.voltSampleInterval = attr->value ;
       }  break;

       case 0x115B :  //	balanceCtrl	均衡控制	R/W	
       {
           battery_obj[idx].config.balanceCtrl = attr->value ;
       }  break;

       case 0x115C :  //	checkRes	手动测内阻	R/W	
       {
           battery_obj[idx].config.checkRes = attr->value ;
       }  break;

       case 0x115D :  //	resetCfg	恢复出厂设置	R/W	
       {
           battery_obj[idx].config.resetCfg = attr->value ;
       }  break;

       case 0x115E :  //	restoreCfg	恢复保存设置	R/W	
       {
           battery_obj[idx].config.restoreCfg = attr->value ;
       }  break;

       case 0x115F :  //	saveCfg	保存现有设置	R/W	
       {
           battery_obj[idx].config.saveCfg = attr->value ;
       }  break;

       case 0x1160 :  //	version	版本号	R/W	
       {
           battery_obj[idx].config.version = attr->value ;
       }  break;

#endif
        //////---------R/W--------------------------//////////////////////

       default: 
           break;

    }

 return ret;

}



#define  battery_scale_step           (25U)

void battery_test_tick_min(uint8_t idx)
{
static uint32_t cnt = 0;
  IotModel attr;
    memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();
/////------测试数据-------------------------
    // .data.level_mm = 50728, //0.01mm
    // .data.temper   = 37,    //温度  1℃ 


// 0x0500	烟雾报警信息
    attr.iot_id =0x0500;
    attr.value =0x0000;
    battery_set_attr(idx, &attr); 


// 0x0501	烟雾
    attr.iot_id =0x0501;

   if(cnt < battery_max_scale_0_01mm/battery_scale_step)
   {
       attr.value = battery_max_scale_0_01mm - battery_scale_step*cnt;
   }else{
       attr.value = 0;
   }


    battery_set_attr(idx, &attr); 


// 0x0030	温度
    attr.iot_id =0x0030;
    attr.value = 20 + (cnt&0x0F);
    battery_set_attr(idx, &attr); 
 
    cnt++;

}




//void battery_update_tick_min(uint8_t idx,uint8_t pattr_size,IotModel* pattr )
////刷新节点运行数据
void battery_update_tick_min(uint8_t idx,int8_t temper ,uint32_t battery )
{
  IotModel attr;
  memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();



    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:battery idx outof range\n"); 
       return ;
    }



/*---------这里添加报警逻辑------------------------
#if 0
battery_attr_t*  pattr=battery_get_obj( idx) ; 


  
// 0x0500	烟雾报警信息
    // attr.iot_id =0x0500;
    // attr.value =0x0000;
    // battery_set_attr(idx, &attr); 

//---------这里添加报警逻辑------------------------

    if( temper>=pattr->config.over_temper_th )
    {
        pattr->data.alarm.bit.over_temper = 1;

    }else if( temper<=pattr->config.under_temper_th )
    {
        pattr->data.alarm.bit.under_temper = 1;
            
    }else{
        pattr->data.alarm.bit.over_temper  = 0;
        pattr->data.alarm.bit.under_temper = 0;
    }


    if( battery>=pattr->config.over_level_th )
    {
        pattr->data.alarm.bit.over_level = 1;

    }else if( battery<=pattr->config.under_level_th )
    {
        pattr->data.alarm.bit.under_level = 1;
            
    }else{
        pattr->data.alarm.bit.over_level  = 0;
        pattr->data.alarm.bit.under_level = 0;
    }

   pattr = NULL;   

#endif

---------这里添加报警逻辑------------------------*/



// 0x0501	烟雾
    attr.iot_id =0x0501;
    attr.value = battery;
    battery_set_attr(idx, &attr); 


// 0x0030	温度
    attr.iot_id =0x0030;
    attr.value  = temper;////负温度的时候有问题----还需要进一步处理
    battery_set_attr(idx, &attr); 
 
}







////刷新节点运行数据
void battery_obj_update(uint8_t idx,battery_attr_t* pliq_in  )
{
  IotModel attr;
  memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:battery idx outof range\n"); 
       return ;
    }


    if( NULL==pliq_in )
    {
       logout("error:pliq_in==NULL\n"); 
       return ;
    }



//#if 0
battery_attr_t*  pattr=battery_get_obj( idx) ; 

 ////-----保存节点数据到物模型------
      *pattr = *pliq_in;

 //-----同步节点数据到 白名单--------
   iot_set_device_online_state_with_index(idx,  pliq_in->flags.bit.online );   ////同步节点在线标志到 白名单-----

 //-----还有其它数据需要同步到 白名单----通道编号--通道地址???----





#if 0
// 0x0500	烟雾报警信息
    // attr.iot_id =0x0500;
    // attr.value =0x0000;
    // battery_set_attr(idx, &attr); 

//---------这里添加报警逻辑------------------------

    if( temper>=pattr->config.over_temper_th )
    {
        pattr->data.alarm.bit.over_temper = 1;

    }else if( temper<=pattr->config.under_temper_th )
    {
        pattr->data.alarm.bit.under_temper = 1;
            
    }else{
        pattr->data.alarm.bit.over_temper  = 0;
        pattr->data.alarm.bit.under_temper = 0;
    }


    if( battery>=pattr->config.over_level_th )
    {
        pattr->data.alarm.bit.over_level = 1;

    }else if( battery<=pattr->config.under_level_th )
    {
        pattr->data.alarm.bit.under_level = 1;
            
    }else{
        pattr->data.alarm.bit.over_level  = 0;
        pattr->data.alarm.bit.under_level = 0;
    }

   pattr = NULL;   

//#endif


// 0x0501	烟雾
    attr.iot_id =0x0501;
    attr.value = battery;
    battery_set_attr(idx, &attr); 


// 0x0030	温度
    attr.iot_id =0x0030;
    attr.value  = temper;////负温度的时候有问题----还需要进一步处理
    battery_set_attr(idx, &attr); 
 
#endif


}






























